package demo2;

import java.util.LinkedList;
import java.util.Queue;

class MyStack {
    public Queue<Integer> queue1;
    public Queue<Integer> queue2;

    public MyStack() {
        queue1 = new LinkedList<>();
        queue2 = new LinkedList<>();
    }

    /**
     * 入栈
     * @param x
     */
    public void push(int x) {
        if(!queue1.isEmpty()) {
            queue1.offer(x);
        }else if(!queue2.isEmpty()) {
            queue2.offer(x);
        }else {
            queue1.offer(x);
        }
    }

    /**
     * 出栈
     * @return
     */
    public int pop() {
        //当都为空时，说明"栈"中没有元素
        if(empty()) {
            return -1;
        }
        //对于非空队列进行操作
        if(!queue1.isEmpty()) {
            int size = queue1.size();
            //将其余元素移到空队列
            while (size != 1) {
                queue2.offer(queue1.poll());
                size--;
            }
            //返回队列中仅有的元素，并删除
            return queue1.poll();
        }else {
            //下面是!queue2.isEmpty()的情况
            int size = queue2.size();
            while (size != 1) {
                queue1.offer(queue2.poll());
                size--;
            }
            return queue2.poll();
        }
    }

    /**
     * 获取"栈"顶元素
     * @return
     */
    public int top() {
        //判断栈是否为空
        if(empty()) {
            return -1;
        }
        if(!queue1.isEmpty()) {
            int size = queue1.size();
            while (size != 1) {
                queue2.offer(queue1.poll());
                size--;
            }
            //上述操作和出栈一样，下面只需输出元素，并不删除数据
            int value = queue1.poll();
            queue2.offer(value);//将元素入队，避免丢失
            return value;
        }else {
            int size = queue2.size();
            while (size != 1) {
                queue1.offer(queue2.poll());
                size--;
            }
            int value = queue2.poll();
            queue1.offer(value);
            return value;
        }
    }

    public boolean empty() {
        return queue1.isEmpty() && queue2.isEmpty();//当队列都为空时，说明"栈"为空
    }
}
